package com.wanglei.ssm.controller;

import com.wanglei.ssm.domain.Role;
import com.wanglei.ssm.domain.UserInfo;
import com.wanglei.ssm.service.RoleService;
import com.wanglei.ssm.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

/**
 * 用户控制器
 *
 * @author wl
 */
@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private RoleService roleService;

    /**
     * 查询所有用户信息
     *
     * @return 用户列表
     * @throws Exception e
     */
    @RequestMapping("/findAll.do")
    public ModelAndView findAll() throws Exception {
        List<UserInfo> users = userService.findAll();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("userList", users);
        modelAndView.setViewName("user-list");
        return modelAndView;
    }

    /**
     * 根据id查询用户
     *
     * @param id 用户id
     * @return 用户信息展示界面
     * @throws Exception e
     */
    @RequestMapping("/findById.do")
    public ModelAndView findById(String id) throws Exception {
        UserInfo user = userService.findById(id);
        System.out.println(user.getRoles());
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", user);
        modelAndView.setViewName("user-show");
        return modelAndView;
    }

    /**
     * 添加用户
     *
     * @param user 用户信息
     * @return 跳转到查询所有界面
     * @throws Exception e
     */
    @RequestMapping("/save")
    public String save(UserInfo user) throws Exception {
        userService.save(user);
        return "redirect:findAll.do";
    }

    /**
     * 添加角色
     *
     * @param id           用户id
     * @param modelAndView 视图
     * @return 添加角色页面
     * @throws Exception e
     */
    @RequestMapping("/findUserByIdAndAllRole.do")
    public ModelAndView findUserByIdAndAllRole(String id, ModelAndView modelAndView) throws Exception {
        // 根据用户id查询需要操作的用户信息
        UserInfo user = userService.findById(id);
        // 根据用户id查询可以用作添加的角色信息
        List<Role> roleList = roleService.findOtherRole(id);
        // 将数据放入模型中
        modelAndView.addObject("user", user);
        modelAndView.addObject("roleList", roleList);
        modelAndView.setViewName("user-role-add");
        return modelAndView;
    }

    /**
     * 给指定用户添加角色信息
     *
     * @param userId 用户id
     * @param ids    角色信息集合
     * @return 跳转到查询所有用户界面
     * @throws Exception e
     */
    @RequestMapping("/addRoleToUser.do")
    public String addRoleToUser(String userId, String[] ids) throws Exception {
        userService.addRoleToUser(userId, ids);
        return "redirect:findAll.do";
    }
}
